package com.linkgie.galaxyframework.persistence.data;

import com.linkgie.galaxyframework.utils.bean.FieldSelect;

/**
 * 基于属性的查询断言生成器；
 */
public interface FieldUpdater<T> extends EntityUpdater<T> {

    /**
     * 更新一个字段；
     * 
     * @param selectFunction
     * @return
     */
    FieldUpdater<T> set(FieldSelect<T> selectFunction, Object value);

    /**
     * 字段增加指定的数值；
     * 
     * @param selectFunction
     * @return
     */
    FieldUpdater<T> increase(FieldSelect<T> selectFunction, Number value);

    /**
     * 如果指定的值大于字段的当前值，则将指定值更新为字段的新值；
     * 
     * @param selectFunction
     * @param value
     * @return
     */
    FieldUpdater<T> max(FieldSelect<T> selectFunction, Number value);

    /**
     * 如果指定的值小于字段的当前值，则将指定值更新为字段的新值；
     * 
     * @param selectFunction
     * @param value
     * @return
     */
    FieldUpdater<T> min(FieldSelect<T> selectFunction, Number value);

    /**
     * 将字段值乘以指定值，得到的结果作为字段的新值；
     * 
     * @param selectFunction
     * @param value
     * @return
     */
    FieldUpdater<T> multiply(FieldSelect<T> selectFunction, Number value);

    /**
     * 删除字段；
     * 
     * @param selectFunction
     * @return
     */
    FieldUpdater<T> del(FieldSelect<T> selectFunction);

    /**
     * 重命名字段；
     * 
     * @param oldFieldSelectFunction 旧的字段；
     * @param newFieldSelectFunction 新的字段；
     * @return
     */
    FieldUpdater<T> rename(FieldSelect<T> oldFieldSelectFunction,
            FieldSelect<T> newFieldSelectFunction);
}
